package com.sgr.dao.impl;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import com.sgr.dao.ProdutoDao;
import com.sgr.model.Produto;

public class ProdutoDaoImpl implements ProdutoDao {

	
	@Autowired
	private SessionFactory sessionFactory;
	
	public void setSessionFactory (SessionFactory sessionFactory){
		this.sessionFactory = sessionFactory;
	}
	public Session getCurrentSession(){
		return this.sessionFactory.getCurrentSession();
	}
	public SessionFactory getSessionFactory(){
		return sessionFactory;
	}
	@Override
	@Transactional
	public void save(Produto prod){
		getCurrentSession().save(prod);
	}
	
	@Override
	@Transactional
	public void update(Produto prod){
		getCurrentSession().update(prod);
	}
	@Override
	@Transactional
	public void delete(Produto prod){
		getCurrentSession().delete(prod);
	}
	
	@Override
	@Transactional
	public List findByName(String name){
		return null;
	}
	@Override
	@Transactional
	public Long count(){
		Long rows = (Long) getCurrentSession().createCriteria(Produto.class).setProjection(Projections.rowCount()).uniqueResult();
		return rows;
	}
	@Override
	@Transactional
	public List findAll(){
		List Produto = getCurrentSession().createQuery("from Produto").list();
		return Produto;
	}
	@Override
	@Transactional
	public Produto findByPk(int id){
		Produto produto = (Produto)getCurrentSession().createCriteria(Produto.class).add(Restrictions.eq("id",id)).uniqueResult();
		return produto;
	}
}
